<script>
export default {
  globalData: {
    schemeData: null
  },
  onLaunch(options) {
    console.log('App Launch', options);
    this.handleSchemeData(options);
  },
  onShow(options) {
    console.log('App Show', options);
    
    // #ifdef APP-PLUS
    // 外部启动APP处理
    var args = plus.runtime.arguments;
    plus.runtime.arguments = null;
    plus.runtime.arguments = "";
    
    if (args) {
      console.log('外部启动参数:', args);
      
      // 处理 test://callback 形式的回调
      if (args.indexOf('test://callback') !== -1 && args.indexOf('code=') !== -1) {
        console.log('检测到授权回调:', args);
        
        // 解析参数
        try {
          var params = {};
          var query = args.split('?')[1];
          if (query) {
            var pairs = query.split('&');
            for (var i = 0; i < pairs.length; i++) {
              var pair = pairs[i].split('=');
              if (pair.length === 2) {
                params[pair[0]] = decodeURIComponent(pair[1]);
              }
            }
            
            if (params.code) {
              console.log('成功解析授权参数:', params);
              this.handleOAuthCallback(params);
            }
          }
        } catch (e) {
          console.error('解析参数失败:', e);
        }
      }
    }
    // #endif
    
    // 普通的 uniapp 参数处理
    this.handleSchemeData(options);
  },
  onPageNotFound(obj) {
    // 此方法可能会捕获到一些特殊的 URL 调用
    console.log('App onPageNotFound:', JSON.stringify(obj));
    
    // 检查是否是 scheme 回调
    if (obj.path && obj.path.indexOf('callback') > -1) {
      const query = {};
      if (obj.query) {
        for (const key in obj.query) {
          if (obj.query.hasOwnProperty(key)) {
            query[key] = obj.query[key];
          }
        }
      }
      
      if (query.code) {
        console.log('在 onPageNotFound 中捕获到回调:', JSON.stringify(query));
        this.handleSchemeData({query});
      }
    }
  },
  methods: {
    // 处理 OAuth 回调
    handleOAuthCallback(params) {
      // 存储到全局变量
      this.globalData.schemeData = params;
      
      // 存储到本地缓存
      uni.setStorageSync('scheme_data', params);
      
      // 发送全局事件
      uni.$emit('scheme-data-received', params);
      
      // 显示通知
      uni.showToast({
        title: '收到授权数据',
        icon: 'success'
      });
      
      console.log('授权数据处理完成');
    },
    
    // 处理常规参数
    handleSchemeData(options) {
      try {
        if (options && options.query) {
          const { code, state } = options.query;
          if (code) {
            console.log('常规参数中检测到授权码:', { code, state });
            this.handleOAuthCallback({ code, state });
          }
        }
      } catch (e) {
        console.error('处理参数出错:', e);
      }
    },
    
    // 生成随机状态码
    generateRandomState() {
      const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
      let state = '';
      for (let i = 0; i < 16; i++) {
        state += chars.charAt(Math.floor(Math.random() * chars.length));
      }
      return state;
    }
  }
}
</script>

<style>
/* 基础样式 */
</style>